iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
ChatGPT & Codex

當 Codex 開始自己工作:從 Prompt Engineering 到 Agent Governance系列 第 2

Day 2|四種真實開發場景,如何把我的 Codex Workflow 一步步逼成現在這個樣子

  • 分享至 

  • xImage
  •  

Day2

昨天提到,當 Codex 開始自己工作後,我開始在意的,不再只是 Prompt。

而是三件事:

  • Context:它現在知道什麼?
  • Authority:它現在可以做什麼?
  • Evidence:它怎麼證明自己做對?

但這三個問題,不是我一開始就想出來的。

比較接近真實情況的是:

專案先出問題,規則才慢慢長出來。

今天不談理論。

先來看我目前使用 Codex 的四種開發場景。

有些是公開專案,有些不適合公開全部原始碼,但我會盡量保留足以理解問題與工程判斷的 Evidence。


這四種場景,剛好逼出了四種不同的問題

我目前主要遇到的場景,大致可以分成四類:

Web / API 系統
├─ Scope Drift

Cloudflare Workers / D1 / Production Data
├─ Authority / Production Risk

Android / Windows Toolchain
├─ Environment Drift

Shared Agent Skills / Cross-Repo Governance
└─ Governance Drift

表面上看起來,它們都只是「寫程式」。

但真的讓 Codex 進去工作之後,問題完全不一樣。


場景一:Web 系統

第一類是最直覺的。

React 前端、API、資料讀取、權限、登入、管理介面。

這種專案最容易讓人產生一個錯覺:

反正 Codex 很會讀 Code,就叫它直接找問題、改完、測完。

一開始確實很好用。

例如我要新增一個欄位、調整一個畫面、補一個 API 行為,Codex 通常可以自己一路追:

UI
↓
API client
↓
Worker route
↓
domain logic
↓
database query
↓
tests

如果只是傳統 autocomplete,很難跨這麼多層。

但當 Agent 可以自己一路追到底之後,第一個問題也出現了。

它有能力看整個系統,就容易想改整個系統

原本只是:

幫我多顯示今天總共有幾個便當。

Agent 可能會開始發現:

  • projection 不夠乾淨
  • API shape 不一致
  • 命名可以統一
  • 某個 helper 可以抽出去
  • 類似 endpoint 也可以一起改

這些想法可能都沒錯。

問題是:

這次任務根本沒有要求。

於是我第一次明確感受到:

Good idea ≠ Approved scope

這也是後來我開始加入:

  • bounded scope
  • collision check
  • explicit exclusions
  • no unrelated refactor

這類規則的原因。

不是因為 Codex 不夠聰明。

剛好相反。

是因為它太容易看到更多可以做的事。


場景二:Cloudflare Workers / D1

第二類場景,開始讓我真的緊張。

因為這裡已經不只是改 Code。

它會碰到:

  • Worker
  • D1
  • Migration
  • Production data
  • Environment variables
  • CORS
  • Remote deploy

而且同一個專案裡,可能同時存在:

local
POC
formal
legacy
remote-test
production

這時候,「改對程式」已經不等於「做對事情」。

最危險的錯誤,不一定是 SQL 寫錯

更危險的是:

SQL 是對的,但跑在錯的 Database。

或:

Migration 本身沒問題,但套到了不該動的環境。

甚至:

Code 改得完全正確,但 Agent 誤判了這次是否允許 deploy。

後來我開始把環境與資料操作,當成一等公民。

例如在做 Remote D1 操作前,我越來越要求先確認:

  • Database name
  • UUID
  • binding
  • migration state
  • expected row counts
  • source hash
  • mutation scope

這裡也開始出現一個很重要的概念:

Capability ≠ Authority

Codex 有能力執行:

wrangler d1 execute
wrangler deploy

不代表它每次都應該執行。

我後來開始把動作分級。

例如:

backend-only
bounded scope
tests pass
no migration
no remote data mutation
↓
可以繼續 deploy

但:

schema
migration
remote data mutation
auth semantics
production repair
↓
需要 Human Gate

到這一步,我才開始發現:

Agent 開發開始很像權限系統。


場景三:Android / Windows Toolchain

第三種場景,讓我看到的是另一種問題。

不是 Agent 亂改。

而是:

環境本身會騙人。

例如 Android 專案裡,明明你以為 Gradle、JDK、SDK 都已經設定好了,但實際上可能是:

  • JAVA_HOME 指向錯的位置
  • Gradle user home 落到意外路徑
  • Android SDK 沒在 PATH
  • wrapper 使用不同 JVM
  • Windows shell 行為不同

這種問題很有趣。

因為 Agent 看到錯誤訊息後,很容易先懷疑 Code。

但 root cause 可能根本不是 Code。

而是:

Environment

這類專案讓我開始更重視:

Runtime identity
Toolchain identity
Execution environment

Agent 不只要知道「這個專案是什麼」,
還要知道「它現在到底在哪裡執行」。

這和 Web 專案很不一樣。

Web 專案最怕 scope drift。

Android / Windows 更常遇到的,是 execution drift。

Code 沒變,環境不同,結果就不同

這也是為什麼後來我的 Preflight 裡,慢慢不只檢查 Git。

也開始加入:

  • current directory
  • Java version
  • Gradle path
  • SDK state
  • local vs remote assumptions

很多時候,這些檢查比重新讀十個 source file 更重要。


場景四:Shared Agent Skills / Cross-Repo Governance

第四種場景,是最晚出現,但我覺得最有意思的。

一開始,每個 Repo 都有自己的規則。

例如:

這個 Repo 修改前要先做 preflight。
這個 Repo deploy 前要跑哪些測試。
這個 Repo 不可以碰 remote D1。
這個 Repo Windows 要有 fallback。

久了之後,我開始發現:

我是不是一直在複製同一套 Prompt?

於是一些流程開始被抽成 Skill。

例如:

  • safe preflight
  • verification
  • common guardrails

最後甚至變成一個獨立的 shared governance repository。

這時候,問題又升級了。

當規則本身變成共用元件,它也會有版本問題

原本只是:

某個 Repo 裡的一段 Prompt。

抽出去之後,就開始出現:

version
compatibility
rollout
consumer
breaking change
fallback

Agent Governance 自己也開始像軟體。

它需要:

  • SemVer
  • release notes
  • consumer tracking
  • backward compatibility
  • rollout strategy

這件事是我一開始完全沒想到的。

我原本只是想:

不要每次重複貼 Prompt。

結果最後長成:

Shared Agent Platform
        ↓
   multiple repos

這也是我開始使用「Agent Engineering」這個詞,而不是只說 Prompt Engineering 的原因。


四種場景,逼出了四種不同風險

如果把今天這四種場景放在一起看:

場景 最常逼出的問題
Web / API Scope drift
Workers / D1 Authority / Production risk
Android / Windows Environment drift
Shared Skills Governance drift

一開始我以為只要 Prompt 寫得更完整就可以處理。

後來發現不是。

因為這四種問題,本質上都不是一句 Prompt 能永久解決的。


我的 Workflow 開始一層一層長出來

最早只有:

Prompt
↓
Implement

後來變成:

Prompt
↓
Plan
↓
Implement
↓
Test

再後來:

Intent
↓
Preflight
↓
Plan
↓
Plan Freeze
↓
Execute
↓
Verify
↓
Deploy Gate
↓
Evidence
↓
Handoff

而且每一層,幾乎都對應到某一次踩坑。

不是為了看起來專業。

是因為前一版不夠用了。


我現在越來越確定一件事

Agent 最難治理的地方,不是它不夠聰明。

而是:

它已經聰明到可以做太多事情。

當它只會補一行 Code 時,風險很有限。

當它可以:

  • 讀完整 Repo
  • 改多個檔案
  • 執行 command
  • 跑 migration
  • 查 remote database
  • deploy
  • commit
  • 開新的 Worktree

需要設計的,就不再只是:

「我要怎麼讓它做得更好?」

而是:

「我要怎麼讓它知道,什麼時候不該做?」

這也是我後來開始把 Agent Workflow 拆成:

Context
Authority
Evidence

三個核心問題的原因。


公開 Repo 不是這個系列的重點

這裡也先說明一件事。

這個系列裡,有些案例會來自公開 Repository。

有些則只會公開:

  • 架構
  • 問題
  • 決策
  • 測試結果
  • diff 摘要
  • anonymized evidence

我不打算為了寫文章,把所有真實專案原始碼全部公開。

因為這系列想討論的不是:

「這個專案怎麼 clone?」

而是:

當 Coding Agent 開始參與真實工程,哪些判斷值得被留下來?

對我來說,足以重現決策的 Evidence,比公開全部 Code 更重要。


明天開始拆第一層:AGENTS.md

既然問題這麼多,最直覺的做法是:

把規則全部寫進 AGENTS.md 不就好了?

我一開始也差不多是這樣想。

結果後來發現:

AGENTS.md 寫太少會失控,寫太多一樣會失控。

甚至規則本身,還可能讓 Agent 變慢、重複探索、反覆執行同一套 ritual。

Day 3 會開始看:

AGENTS.md 到底應該放什麼?為什麼規則不是越多越安全?


上一篇
Day 1|當 Codex 開始自己工作:為什麼 Prompt Engineering 已經不夠了
下一篇
Day 3|我開始把規則寫進 AGENTS.md:讓 Codex 不用每次重新教
系列文
當 Codex 開始自己工作:從 Prompt Engineering 到 Agent Governance9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言